Skip to main content

What do you mean by software maintenance? Explain types of software maintenance.

Software Maintenance: Definition and Importance​

Software maintenance refers to the process of modifying and updating software after its initial delivery to correct faults, improve performance, or adapt the software to a changed environment. It is a crucial phase in the software development life cycle (SDLC) that begins after the software has been deployed and continues throughout its operational life.

According to the IEEE Standard for Software Maintenance (IEEE 1219), software maintenance is defined as "the modification of a software product after delivery to correct faults, improve performance or other attributes, or adapt the product to a changed environment."

Software maintenance typically accounts for 60-80% of the total software life cycle cost, making it the most resource-intensive phase of the SDLC. Its importance stems from the need to:

  1. Ensure the software continues to meet user requirements
  2. Adapt to changing business needs and technological environments
  3. Correct defects that were not discovered during initial development
  4. Improve performance, reliability, and usability
  5. Extend the useful life of the software investment

Types of Software Maintenance​

There are four standard categories of software maintenance, as defined by E.B. Swanson and clarified in the ISO/IEC 14764 standard:

1. Corrective Maintenance​

Corrective maintenance involves fixing defects and bugs that are discovered after the software has been deployed. These issues may affect functionality, performance, or other operational aspects of the software.

Characteristics:

  • Reactive in nature (performed after defects are discovered)
  • Often initiated by user reports or system failures
  • Typically urgent, especially for critical defects
  • Usually involves debugging and fault isolation

Examples:

  • Fixing a calculation error in a financial application
  • Resolving a memory leak that causes the application to crash
  • Correcting logic errors that produce incorrect results
  • Repairing broken links or UI elements in a web application

Process:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Bug reported β”‚ β”‚ Reproduce and β”‚ β”‚ Analyze and β”‚
β”‚ or detected │─────►│ prioritize │─────►│ diagnose issueβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Deploy fix │◄─────│ Test and │◄─────│ Implement β”‚
β”‚ and verify β”‚ β”‚ validate β”‚ β”‚ fix β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Adaptive Maintenance​

Adaptive maintenance involves modifying the software to accommodate changes in the external environment, such as new hardware, operating systems, or regulatory requirements. This type of maintenance ensures the software remains usable as its technological context evolves.

Characteristics:

  • Proactive or reactive depending on how changes are anticipated
  • Driven by external factors rather than internal software issues
  • Often planned in advance when changes are known (e.g., upcoming OS release)
  • Requires understanding of both the existing system and the new environment

Examples:

  • Updating software to run on a new operating system version
  • Modifying database access code to work with a new DBMS
  • Adapting software to comply with new regulations (e.g., GDPR)
  • Updating UI to work on new mobile devices or screen resolutions

Process:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Identify β”‚ β”‚ Assess impact β”‚ β”‚ Plan and β”‚
β”‚ external │─────►│ on software │─────►│ design β”‚
β”‚ change β”‚ β”‚ components β”‚ β”‚ modifications β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Deploy and │◄─────│ Test in new │◄─────│ Implement β”‚
β”‚ monitor β”‚ β”‚ environment β”‚ β”‚ changes β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3. Perfective Maintenance​

Perfective maintenance involves enhancing or improving the software beyond its original specifications to address new or changed user requirements. This type of maintenance focuses on improving performance, maintainability, or user experience.

Characteristics:

  • Enhancement-focused rather than problem-focused
  • Often driven by user feedback or business needs
  • May involve significant refactoring or restructuring
  • Generally planned and scheduled as part of product evolution

Examples:

  • Optimizing algorithms to improve performance
  • Refactoring code to enhance maintainability
  • Improving user interface based on user feedback
  • Adding new features requested by users
  • Enhancing reporting capabilities of a business application

Process:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Gather user β”‚ β”‚ Analyze and β”‚ β”‚ Design β”‚
β”‚ requirements │─────►│ prioritize │─────►│ improvements β”‚
β”‚ or feedback β”‚ β”‚ enhancements β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Release and │◄─────│ Test and │◄─────│ Implement β”‚
β”‚ collect β”‚ β”‚ validate β”‚ β”‚ enhancements β”‚
β”‚ feedback β”‚ β”‚ improvements β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4. Preventive Maintenance​

Preventive maintenance involves modifying software to improve its future maintainability, reliability, or performance, without adding new features or fixing specific defects. This type of maintenance aims to prevent problems before they occur.

Characteristics:

  • Proactive in nature
  • Focused on long-term software health
  • Often involves refactoring, documentation, or technical debt reduction
  • May not produce immediately visible benefits to users

Examples:

  • Refactoring complex code to improve readability
  • Updating documentation to reflect current implementation
  • Adding or improving comments in the code
  • Improving test coverage
  • Modernizing the architecture for better scalability
  • Migrating from deprecated libraries or frameworks

Process:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Identify β”‚ β”‚ Analyze code β”‚ β”‚ Plan β”‚
β”‚ maintenance │─────►│ quality and │─────►│ preventive β”‚
β”‚ opportunities β”‚ β”‚ technical debtβ”‚ β”‚ measures β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Monitor │◄─────│ Test and │◄─────│ Implement β”‚
β”‚ long-term β”‚ β”‚ validate β”‚ β”‚ improvements β”‚
β”‚ improvements β”‚ β”‚ β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Additional Classification of Maintenance​

In addition to the four main types, software maintenance can also be classified based on timing and approach:

Based on Timing​

1. Emergency Maintenance​

Emergency maintenance is performed in response to an unforeseen failure that requires immediate attention to restore system operation or prevent significant damage.

Characteristics:

  • Highest priority
  • Unplanned and reactive
  • Often involves temporary fixes followed by permanent solutions
  • May bypass normal change processes in critical situations

Examples:

  • Fixing a security vulnerability being actively exploited
  • Addressing system crashes in a production environment
  • Resolving issues causing data corruption

2. Planned Maintenance​

Planned maintenance is scheduled in advance and carried out according to a maintenance plan.

Characteristics:

  • Scheduled during low-usage periods to minimize disruption
  • Well-documented and communicated to stakeholders
  • Follows established change management processes
  • May combine multiple maintenance activities

Examples:

  • Scheduled monthly updates
  • Quarterly feature releases
  • Planned system upgrades

Based on Approach​

1. Big Bang Maintenance​

Big Bang maintenance involves making all changes at once, with a complete replacement or major update of the system.

Characteristics:

  • High risk but potentially high reward
  • Requires extensive testing
  • Significant downtime during implementation
  • Often used for major version releases

2. Incremental Maintenance​

Incremental maintenance involves making small, gradual changes to the system over time.

Characteristics:

  • Lower risk
  • Easier to test and validate
  • Minimal disruption to users
  • Commonly used in Agile environments
  • Supports continuous improvement

The Software Maintenance Process​

The software maintenance process typically follows these key steps:

1. Identification and Classification​

  • Receive and log maintenance requests
  • Classify by type (corrective, adaptive, perfective, preventive)
  • Prioritize based on urgency, impact, and business value

2. Analysis​

  • Understand the change request or problem
  • Analyze impact on existing system
  • Estimate resources and time required
  • Evaluate alternatives

3. Design​

  • Design the necessary modifications
  • Update relevant documentation
  • Review design with stakeholders

4. Implementation​

  • Make the necessary code changes
  • Follow coding standards and best practices
  • Update documentation
  • Conduct code reviews

5. Testing​

  • Unit testing of modified components
  • Integration testing
  • Regression testing to ensure existing functionality is not affected
  • User acceptance testing for significant changes

6. Delivery​

  • Deploy changes to production
  • Communicate changes to users
  • Monitor for any issues
  • Update maintenance records
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚
β”‚ Software Maintenance Process β”‚
β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ Identification Analysis Design Implementation β”‚
β”‚ β”‚ β”‚ β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚ β”‚
β”‚ Testing β”‚ Delivery β”‚
β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Challenges in Software Maintenance​

1. Technical Challenges​

  • Legacy code: Dealing with outdated technologies and poorly documented code
  • Technical debt: Addressing shortcuts and suboptimal solutions implemented previously
  • Knowledge transfer: Maintaining software developed by others
  • System complexity: Understanding complex interdependencies
  • Tool limitations: Working with outdated development environments

2. Organizational Challenges​

  • Resource allocation: Balancing maintenance with new development
  • Cost justification: Demonstrating the value of maintenance activities
  • Knowledge management: Preserving system knowledge over time
  • Staff turnover: Loss of expertise when developers leave
  • Resistance to change: Stakeholder reluctance to update working systems

3. Management Challenges​

  • Priority setting: Deciding which maintenance tasks to tackle first
  • Change management: Controlling modifications to minimize negative impacts
  • Version control: Managing multiple versions and configurations
  • Estimation: Accurately estimating maintenance effort
  • Quality assurance: Ensuring maintained software meets quality standards

Strategies for Effective Software Maintenance​

1. Proactive Maintenance Strategies​

  • Implement comprehensive documentation practices
  • Design for maintainability from the beginning
  • Establish coding standards and best practices
  • Use automated testing and continuous integration
  • Regularly refactor code to address technical debt
  • Perform code reviews and static analysis

2. Maintenance Planning and Management​

  • Develop a formal maintenance plan
  • Establish clear procedures for handling change requests
  • Implement a defect tracking system
  • Measure and monitor maintenance activities
  • Set up a configuration management system
  • Train and retain maintenance staff

3. Modern Approaches to Maintenance​

  • DevOps practices: Automate deployment and infrastructure management
  • Continuous Delivery: Streamline the release process
  • Microservices architecture: Make components easier to maintain independently
  • Cloud-based solutions: Simplify environment management
  • Service-oriented architecture: Reduce interdependencies between components

Measuring Maintenance Effectiveness​

Key metrics for evaluating maintenance effectiveness include:

  1. Mean Time Between Failures (MTBF): Average time between system failures
  2. Mean Time To Repair (MTTR): Average time to fix defects
  3. Defect density: Number of defects per unit of code size
  4. Backlog trend: Growth or reduction in maintenance request backlog
  5. Maintenance effort distribution: Percentage of effort spent on each maintenance type
  6. Cost of maintenance: Resources expended on maintenance tasks
  7. Customer satisfaction: User feedback on maintenance quality and responsiveness

Conclusion​

Software maintenance is a critical and ongoing activity that ensures software remains valuable, functional, and relevant throughout its lifetime. By understanding the different types of maintenance and implementing effective maintenance processes and strategies, organizations can extend the useful life of their software, reduce total cost of ownership, and ensure their applications continue to meet evolving business needs.

Effective maintenance requires a balanced approach that addresses immediate issues while also investing in long-term improvements. By viewing maintenance as a strategic activity rather than just a cost center, organizations can maximize the return on their software investments and build sustainable systems that deliver value over time.